Skip to content

01 Flask最小API服务

你用LangChain写好了一个Agent,在终端里跑得很开心。但问题是:这个Agent只能在你自己的电脑上用

想让别人也能用?想让前端调用?想部署到服务器上?你需要给Agent加一个HTTP接口——也就是一个Web API服务。

Flask是Python生态中最轻量的Web框架,几行代码就能起一个API服务。对于Agent项目来说,Flask的优势是:够简单、够灵活、够轻量。你不需要学一大堆概念,就能把Agent包装成一个可以被任何客户端调用的服务。

打个比方:Agent是一个在后厨做菜的厨师,Flask就是餐厅的服务窗口——顾客在窗口点菜(发请求),厨师做菜(Agent处理),服务员把菜端出去(返回响应)。

一、安装Flask

bash
pip install flask

就这一行。Flask的依赖很少,安装很快。

验证一下:

bash
python -c "import flask; print(flask.__version__)"

能看到版本号就说明安装成功了。

二、最小应用

Flask最核心的API就两个东西:创建应用定义路由

python
from flask import Flask

# 创建Flask应用实例
app = Flask(__name__)

# 定义路由:当用户访问 "/" 时,执行下面的函数
@app.route("/")
def hello():
    return "Agent服务已启动!"

四行代码,一个可以运行的Web服务就写好了。逐行解释:

代码作用
Flask(__name__)创建应用实例,__name__告诉Flask去哪里找资源文件
@app.route("/")路由装饰器,把URL路径/和下面的函数绑定
def hello()视图函数,处理请求并返回响应
return "..."返回的内容会发给客户端

三、运行服务

把上面的代码保存为app.py,然后用flask命令启动:

bash
flask --app app run

你会看到类似这样的输出:

 * Serving Flask app 'app'
 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

打开浏览器访问http://127.0.0.1:5000,就能看到"Agent服务已启动!"。

3.1 省事技巧

如果你的文件名就叫app.pywsgi.py,可以省掉--app参数:

bash
flask run

Flask会自动找到app.py

3.2 指定端口

默认端口是5000,如果被占用了可以换一个:

bash
flask --app app run --port 8080

3.3 局域网可访问

默认只能本机访问(127.0.0.1)。想让同一局域网的其他设备也能访问:

bash
flask --app app run --host 0.0.0.0

这样别人通过你的IP地址就能访问到服务了。

四、Debug模式

开发阶段,每次改完代码都要手动重启服务很烦。开启Debug模式后,代码改了服务会自动重启,而且出错时会在浏览器里显示详细的错误信息。

bash
flask --app app run --debug

输出会多一行:

 * Debug mode: on
 * Restarting with stat
 * Debugger is active!

现在你改一下app.py保存,服务会自动重启,刷新浏览器就能看到最新效果。

注意:Debug模式只能用于开发环境,千万不要在生产环境开启。 因为Debug模式下的交互式调试器允许在浏览器里执行任意Python代码,这是一个严重的安全风险。

五、理解请求和响应

当用户访问http://127.0.0.1:5000/时,发生了什么?

用户浏览器 → 发送HTTP请求(GET /) → Flask收到请求 → 执行hello()函数 → 返回响应 → 用户看到页面

整个过程就是:

  1. 用户发一个HTTP请求到Flask
  2. Flask根据URL找到对应的视图函数
  3. 视图函数执行,返回结果
  4. Flask把结果包装成HTTP响应发回去

对于Agent服务来说,这个流程变成:

客户端 → 发送POST请求(携带用户消息) → Flask → 调用Agent处理 → 返回Agent的回答

六、第一个Agent API

来写一个真正能用的Agent接口。虽然现在还没接真正的Agent,但先把架子搭好:

python
from flask import Flask, request

app = Flask(__name__)


@app.route("/chat", methods=["POST"])
def chat():
    # 从请求体中获取JSON数据
    data = request.get_json()
    user_message = data.get("message", "")

    # 这里后面会替换成真正的Agent调用
    reply = f"收到你的消息: {user_message}"

    return {"reply": reply}


@app.route("/health")
def health():
    """健康检查接口"""
    return {"status": "ok"}


if __name__ == "__main__":
    app.run(debug=True)

两个接口:

接口方法作用
/chatPOST接收用户消息,返回Agent回复
/healthGET健康检查,返回服务状态

测试一下:

bash
# 健康检查
curl http://127.0.0.1:5000/health

# 发送消息
curl -X POST http://127.0.0.1:5000/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "你好"}'

返回结果:

json
{"reply": "收到你的消息: 你好"}

一个Agent API的骨架就搭好了。后面只需要把reply = f"收到你的消息: {user_message}"替换成真正的Agent调用就行。

七、项目结构

实际项目中,推荐这样组织文件:

my-agent-api/
├── app.py          # Flask应用入口
├── agent.py        # Agent逻辑(LangChain等)
├── requirements.txt
└── .env            # 环境变量(API Key等)

目前我们只需要app.py就够了。随着后面功能增加,再逐步拆分。

八、总结

Flask最小API服务的核心就四个东西:

  • Flask(__name__):创建应用
  • @app.route():定义路由
  • request.get_json():获取请求数据
  • return {}:返回JSON响应

几行代码就能把Agent包装成HTTP服务,这就是Flask的魅力。

在下一篇文章中,我们将学习路由和JSON响应的更多用法——动态URL、不同的HTTP方法、请求数据的多种获取方式,让你的Agent API更完善。